package ru.niir.goodfil.utils.filters;

import ru.niir.goodfil.db.GoodfilUtils;

import java.sql.Date;
import java.util.Calendar;
import java.io.Serializable;

/**
 * Фильтр для работы с персональными ценами
 */
public class PersonalPricesFilter implements Serializable
{
    /**
     * Ниманование клиента (подстрока)
     */
    private String clientName;

    /**
     * Наименование товара (подстрока)
     */
    private String goodName;

    /**
     * Идентификатор клиента
     */
    private long clientId = -1;

    /**
     * Идентификатор товара
     */
    private long goodId = -1;

    /**
     * Дата, на которую персональная цена должна действовать
     */
    private Date date = GoodfilUtils.getCurrentDate();

    private long managerId = -1;

    /**
     * Конструктор по-умолчанию
     */
    public PersonalPricesFilter()
    {
    }

    /**
     * Конструктор
     * @param clientId идентификатор клиента
     * @param goodId идентификатор товара
     */
    public PersonalPricesFilter(long clientId, long goodId)
    {
        this.clientId = clientId;
        this.goodId = goodId;
    }

    /**
     * Конструктор
     * @param clientId идентификатор клиента
     * @param goodId идентификатор товара
     * @param date дата, на которую должна действовать персональная цена
     */
    public PersonalPricesFilter(long clientId, long goodId, Date date)
    {
        this.clientId = clientId;
        this.goodId = goodId;
        this.date = date;
    }

    /**
     * Конструктор
     * @param clientName наименование клиента (подстрока)
     * @param goodName наименование товара (подстрока)
     */
    public PersonalPricesFilter(String clientName, String goodName)
    {
        assert clientName != null;
        assert goodName != null;

        this.clientName = clientName;
        this.goodName = goodName;
    }

    /**
     * Конструктор
     * @param clientName наименование клиента (подстрока)
     * @param goodName наименование товара (подстрока)
     * @param date дата, на которую должна действовать персональная цена
     */
    public PersonalPricesFilter(String clientName, String goodName, Date date)
    {
        assert clientName != null;
        assert goodName != null;
        assert date != null;

        this.clientName = clientName;
        this.goodName = goodName;
        this.date = date;
    }

    /**
     * Ниманование клиента (подстрока)
     */
    public String getClientName()
    {
        return clientName;
    }

    /**
     * Ниманование клиента (подстрока)
     */
    public void setClientName(String clientName)
    {
        this.clientName = clientName;
    }

    /**
     * Наименование товара (подстрока)
     */
    public String getGoodName()
    {
        return goodName;
    }

    /**
     * Наименование товара (подстрока)
     */
    public void setGoodName(String goodName)
    {
        this.goodName = goodName;
    }

    /**
     * Дата, на которую персональная цена должна действовать
     */
    public Date getDate()
    {
        return date;
    }

    /**
     * Дата, на которую персональная цена должна действовать
     */
    public void setDate(Date date)
    {
        this.date = date;
    }

    /**
     * Дата, на которую персональная цена должна действовать
     */
    public java.util.Date getDateAsUtilDate()
    {
        return date;
    }

    /**
     * Дата, на которую персональная цена должна действовать
     */
    public void setDateAsUtilDate(java.util.Date date)
    {
        this.date = date == null ? null : new Date(date.getTime());
    }

    /**
     * Идентификатор клиента
     */
    public long getClientId()
    {
        return clientId;
    }

    /**
     * Идентификатор клиента
     */
    public void setClientId(long clientId)
    {
        this.clientId = clientId;
    }

    /**
     * Идентификатор товара
     */
    public long getGoodId()
    {
        return goodId;
    }

    /**
     * Идентификатор товара
     */
    public void setGoodId(long goodId)
    {
        this.goodId = goodId;
    }

    public long getManagerId() {
        return managerId;
    }

    public void setManagerId(long managerId) {
        this.managerId = managerId;
    }

    @Override
    public String toString()
    {
        return "PersonalPricesFilter{" +
               "clientName='" + clientName + '\'' +
               ", goodName='" + goodName + '\'' +
               ", clientId=" + clientId +
               ", goodId=" + goodId +
               ", date=" + date +
               '}';
    }
}
